///
/// [Author] Alex (https://github.com/AlexV525)
/// [Date] 2019-11-17 07:30
///
import 'dart:async';

import 'package:flutter/material.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart';

import 'package:flutterlib/common/constants/constants.dart';
import 'package:flutterlib/common/utils/utils.dart';
class ConventionDialog extends StatefulWidget {
  static Future<bool> show(BuildContext context) => showDialog<bool>(
        context: context,
        builder: (_) => ConventionDialog(),
        barrierDismissible: false,
      );

  @override
  _ConventionDialogState createState() => _ConventionDialogState();
}

class _ConventionDialogState extends State<ConventionDialog> {
  Timer countDownTimer;
  int countDown = 1;

  bool get canSend => countDown == 0;

  @override
  void initState() {
    super.initState();
    countDownTimer = Timer.periodic(1.seconds, (Timer timer) {
      --countDown;
      if (countDown == 0) {
        cancelTimer();
      }
      if (mounted) {
        setState(() {});
      }
    });
  }

  @override
  void dispose() {
    cancelTimer();
    super.dispose();
  }

  void cancelTimer() {
    countDownTimer?.cancel();
    countDownTimer = null;
  }

  Widget get header => Padding(
        padding: EdgeInsets.symmetric(
            horizontal: 16.w, vertical: 20.h),
        child: Center(
          child: Text(
            '发布提醒',
            style:
                TextStyle(fontSize: 23.sp, fontWeight: FontWeight.bold),
          ),
        ),
      );

  Widget get confirmTips => Text.rich(
        const TextSpan(
          children: <InlineSpan>[
            TextSpan(text: '发布前，请确认您已阅读并知晓'),
            TextSpan(
              text: '《趣会平台公约》',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            TextSpan(text: '，且发布的内容符合公约要求。'),
          ],
        ),
        style: TextStyle(
          fontSize: 18.sp,
          fontWeight: FontWeight.normal,
        ),
      );

  Widget get conventionTitle => Padding(
        padding: EdgeInsets.symmetric(vertical: 12.h),
        child: Text(
          '平台公约',
          style: TextStyle(
            fontSize: 20.sp,
            fontWeight: FontWeight.bold,
          ),
          textAlign: TextAlign.center,
        ),
      );

  Widget get conventionContent => Text.rich(
        TextSpan(
          children: <InlineSpan>[
            const TextSpan(
              text: '　趣会是一个小众的兴趣学习分享平台，'
                  '不良的无关的内容会给用户正常浏览带来了不好的影响，'
                  '为了消除此现象，'
                  '规范平台的管理措施。规定如下：\n',
            ),
            const TextSpan(
              text: '一、平台全区\n',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            const TextSpan(
              text: '　禁止发布以下内容信息，形式包括但不限于文字、图片、链接、二维码：\n',
            ),
            const TextSpan(
              text: '　1、 违反法律法规、公序良俗及学校规章制度的信息，'
                  '包括但不限于\n'
                  '　(1) 违反宪法确定的基本原则的；\n'
                  '　(2) 危害国家安全、泄漏国家机密、颠覆国家政权，破坏国家统一的；\n'
                  '　(3) 损害国家荣誉和利益的；\n'
                  '　(4) 煽动民族仇恨、民族歧视，破坏民族团结的\n'
                  '　(5) 破坏国家宗教政策、宣扬邪教和封建迷信的；\n'
                  '　(6) 散布谣言，扰乱社会秩序、破坏社会稳定的；\n'
                  '　(7) 散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的；\n'
                  '　(8) 侮辱或者诽谤他人，侵害他人合法权益的；\n'
                  '　(9) 煽动非法集会、结社、游行、示威、聚众扰乱社会秩序的；\n'
                  '　(10) 以非法民间组织名义活动的；\n'
                  '　(11) 含有法律、法规、规章、地方规范性文件、'
                  '国家政策、政府通知、公序良俗等禁止的内容；\n'
                  '　(12) 本平台认为不利于平台生态、可能给平台造成损失的内容。\n',
            ),
            const TextSpan(
              text: '　2、针对特定用户或群体（包括但不限于种族、国籍、'
                  '宗教信仰、政治立场、身份职业、出身地区、兴趣爱好），'
                  '发布具有挑衅性质、攻击性质（包括但不限于明示与暗示的歧视、'
                  '嘲讽、贬低、挑衅、辱骂）的内容，或存在煽动他人进行上述行为的情况；\n',
            ),
            const TextSpan(
              text: '　3、单一用户或多用户恶意在短时间内发送多条相同或者类似内容，'
                  '包括但不限于刷屏、灌水、刷评论，但在某些活动的气氛烘托下，'
                  '多用户发送相同内容，属于共同的情感表达，不属于恶意刷屏\n',
            ),
            const TextSpan(
              text: '二、违反的处罚规定：\n',
              style: TextStyle(fontWeight: FontWeight.bold),
            ),
            const TextSpan(
              text: '　1、违反规定的帖子，发现后将予屏蔽；\n',
            ),
            const TextSpan(
              text: '　2、严重违规者，将予无限期禁言；\n',
            ),
            const TextSpan(
              text: '　用户被禁言后，需经个人申请方能解禁。\n'
            ),
            const TextSpan(
              text: '   期待大家共同维护我们良好和谐的网络社交环境。',
            ),
          ],
        ),
        style: TextStyle(
          fontSize: 18.sp,
          fontWeight: FontWeight.normal,
        ),
      );

  Widget actions(BuildContext context) => Padding(
        padding: EdgeInsets.all(16.w),
        child: Row(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          children: <Widget>[
            confirmButton(context),
            SizedBox(width: 16.w),
            cancelButton(context),
          ],
        ),
      );

  Widget confirmButton(BuildContext context) => Expanded(
        flex: 5,
        child: MaterialButton(
          elevation: 0.0,
          highlightElevation: 2.0,
          height: 56.h,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10.w),
          ),
          color: context.themeData.canvasColor,
          onPressed: canSend
              ? () {
                  Navigator.of(context).pop(true);
                }
              : null,
          child: Text(
            () {
              const String s = '确认无误';
              if (canSend) {
                return s;
              } else {
                return '$s(${countDown}s)';
              }
            }(),
            style: TextStyle(fontSize: 21.sp),
          ),
          materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
        ),
      );

  Widget cancelButton(BuildContext context) => Expanded(
        flex: 5,
        child: MaterialButton(
          elevation: 0.0,
          highlightElevation: 2.0,
          height: 56.h,
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(10.w),
          ),
          color: currentThemeColor.withOpacity(0.8),
          onPressed: () {
            Navigator.of(context).pop(false);
          },
          child: Text(
            '我再想想',
            style: TextStyle(color: Colors.white, fontSize: 21.sp),
          ),
          materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
        ),
      );

  @override
  Widget build(BuildContext context) {
    return Material(
      type: MaterialType.transparency,
      child: Center(
        child: ClipRRect(
          borderRadius: BorderRadius.circular(20.w),
          child: Container(
            width: Screens.width * 0.75,
            height: Screens.height * 0.7,
            color: currentIsDark
                ? Theme.of(context).canvasColor
                : Theme.of(context).primaryColor,
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: <Widget>[
                header,
                Expanded(
                  child: Container(
                    color: currentIsDark
                        ? Theme.of(context).primaryColor
                        : Theme.of(context).canvasColor,
                    child: CupertinoScrollbar(
                      child: ListView(
                        padding: EdgeInsets.symmetric(
                          horizontal: 20.w,
                          vertical: 10.h,
                        ),
                        children: <Widget>[
                          confirmTips,
                          conventionTitle,
                          conventionContent
                        ],
                      ),
                    ),
                  ),
                ),
                actions(context),
              ],
            ),
          ),
        ),
      ),
    );
  }
}
